package com.company.ljh.easy;
/**
 * 977.给你一个按 非递减顺序 排序的整数数组 nums，返回 每个数字的平方 组成的新数组，要求也按 非递减顺序 排序。
 *输入：nums = [-4,-1,0,3,10]
 * 输出：[0,1,9,16,100]
 * 解释：平方后，数组变为 [16,1,0,9,100]
 * 排序后，数组变为 [0,1,9,16,100]
 *
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode.cn/problems/squares-of-a-sorted-array
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 */


/**
 * @description:
 * @projectName:leet_code
 * @see:com.company.ljh.easy
 * @author:ljh
 * @createTime:2022/5/29 18:29
 * @version:1.0
 */
public class 有序数组的平方 {
    /**
     * 双指针，先找到负数和正数的分界点，再使用双指针比较平方值
     * @param nums
     * @return
     */
    public int[] sortedSquares(int[] nums) {
        //先找到第一个不为负数的下标
        int index = 0;
        for(int num : nums){
            if(num >=0){
                break;
            }else{
                index++;
            }
        }
        int newNums[] = new int[nums.length];
        //双指针判断
        int start = index-1;
        int end = index;
        int newNumsIndex = 0;
        while(start >= 0 && end < nums.length){
            if(-nums[start] < nums[end] ){
                newNums[newNumsIndex++] = nums[start]*nums[start];
                start--;
            }else{
                newNums[newNumsIndex++] = nums[end]*nums[end];
                end++;
            }
        }
        while(start >= 0){
            newNums[newNumsIndex++] = nums[start]*nums[start];
            start--;
        }
        while(end < nums.length){
            newNums[newNumsIndex++] = nums[end]*nums[end];
            end++;
        }
        return newNums;
    }
}
